<?php

require_once(FWK_EXCEPTION."CustonException.class.php");
require_once(BIB_ACTIVE_RECORD);
require_once(FWK_MODEL."AbsModelDao.class.php");
/**
 * Classe modelo para a estrutura da sessão do administrador que estiver logado
 *
 * @author André Coura <andreccls@gmail.com>
 * @since 1.0 - 02/02/2012
 */
class Administrador extends AbsModelDao{
	
	public $_table = "administrador";

	public $_id = "id_admin";
	
	private $_dataLogin;
	private $_ipUsr;
	private $_strHostRemoto;

    public function getIdAdministrador(){
    	return $this->id_admin;
    }
    public function setIdAdministrador($idUser){
    	$this->id_admin = $idUser;
    }

    public function getIdTipoAdministrador(){
    	return $this->_strTipoIdUsr;
    }
    public function setIdTipoAdministrador($idTipoUser){
    	$this->_strTipoIdUsr = $idTipoUser;
    }

    public function getNomeAdministrador(){
    	return utf8_encode($this->nome_admin);
    }
    public function setNomeAdministrador($nomeUser){
    	$this->nome_admin = $nomeUser;
    }

    public function getDataLogin(){
    	return $this->_dataLogin;
    }
    public function setDataLogin($datLogin){
    	$this->_dataLogin = $datLogin;
    }

    public function getIpAdministrador(){
    	return $this->_ipUsr;
    }
    public function setIpAdministrador($strIp){
    	$this->_ipUsr = $strIp;
    }

    public function getHostAdministrador(){
    	return $this->_strHostRemoto;
    }
    public function setHostAdministrador($strHost){
    	$this->_strHostRemoto = $strHost;
    }

    public function getEmailUser(){
    	return $this->email_admin;
    }
    public function setEmailUser($strEmail){
    	$this->email_admin = $strEmail;
    }

    public function getGrupoAdministrador(){
    	return $this->grupo_admin;
    }
    public function setGrupoAdministrador($intGrupo){
    	$this->grupo_admin = $intGrupo;
    }
    
    public function getUltimoAcesso(){
    	return $this->ultimo_acesso;
    }
    public function setUltimoAcesso($datAcesso){
    	$this->ultimo_acesso = $datAcesso;
    }

    public function verUserVisit(){
    	if($this->id_admin == "000" && $this->nome_admin = "Visitante")
    		return false;
    	return true;
    }
    
    
	/**
	 * Seta um objeto usuário a partir dos dados vindos do banco de dados
	 *
	 * @author André Coura
	 * @since 1.0 - 05/07/2008
	 * @param Array arrDados vetor com os dados do usuário vindo do banco de dados
	 */
	public function setObjAdministrador($arrDados){
		self::setIdAdministrador($arrDados["id_admin"]);
    	self::setNomeAdministrador($arrDados["nome_admin"]);
    	self::setEmailUser($arrDados["email_admin"]);
    	self::setIpAdministrador($_SERVER["REMOTE_ADDR"]);
    	self::setHostAdministrador($_SERVER["REMOTE_HOST"]);
    	self::setUltimoAcesso($arrDados["ultimo_acesso"]);
    	self::setDataLogin(time());
	}
	
	/**
	 * Método para verificar a existencia de um usuário por login no banco de dados
	 *
	 * @author André Coura <andreccls@gmail.com>
	 * @since 1.0 - 23/07/2011
	 * @param String $strLogin: login do administrador
	 * @param String $strPassw: senha do administrador
	 */
	public function validaAdministradorDB($strEmail,$strPassw){
		$strQuery = "SELECT * FROM administrador where email_admin = '".$strEmail."' AND ".
					   " senha_admin = '".base64_encode(md5($strPassw))."' ";
		$arrRet = ControlDB::getRow($strQuery,0);
		if(!isset($arrRet["id_admin"]) && count($arrRet)<5 )
			throw new CustonException("Usuário e/ou Senha Inválidos!");
		self::setObjAdministrador($arrRet);
		
		self::registraAcesso($arrRet["id_admin"]);
		
		return $arrRet;
	}
	
	public function registraAcesso($idAdministrador){
		$strQuery = "UPDATE administrador 
						SET ultimo_acesso = '".date("Y-m-d H:i:s")."' 
					  WHERE id_admin = '".$idAdministrador."'";
		return ControlDB::getBanco()->Execute($strQuery);
	}
	
	public function validaEmailDB($strEmail){
		$strQuery = "SELECT * FROM administrador where email_admin = '".$strEmail."'";
		$arrRet = ControlDB::getRow($strQuery,0);
		if(!isset($arrRet["id_admin"]) && count($arrRet)<5 ){
			throw new CustonException("Ja existe este usuário com esse email cadastrado no sistema");
			return false;
		}else{
			$objAdministrador["email_admin"] = $arrRet["email_admin"];
			$objAdministrador["nome_admin"]  = $arrRet["nome_admin"];
			return $objAdministrador;
		}
	}
	
	public function salvaSenhaDB($strPassw, $strEmail){
		$strQuery = "UPDATE administrador 
						SET senha_admin = '".base64_encode(md5($strPassw))."' 
					  WHERE email_admin = '".$strEmail."'";
		$arrRet = ControlDB::getRow($strQuery,0);
		return "salvo";
	}
	
	public function getListaAdministradores(){
		$strQuery = "SELECT 
							id_admin, nome_admin, email_admin,
							senha_admin,
							ultimo_acesso 
					 FROM 
					 		administrador
					 where
					 	id_admin != 1";
		$arrRet = ControlDB::getAll($strQuery,3);
		return $arrRet;
	}
	
	
	public function alterar($id=null,$post,$file){
		try{
			self::salvaPostAutoUtf8($post);
			
			$this->id_admin = $id;
			$this->ultimo_acesso = null;
			
			self::replace();
			if(self::ErrorMsg()){
				print("<pre>");
				print_r($post);
				die("<br/><br /><h1>".self::ErrorMsg()."</h1>");
			}
		}catch(DaoException $e){
			throw new CustonException($e->getMensagem());
		}
	}
}
?>